# 导入llama_index核心模块中的VectorStoreIndex、Document和StorageContext类
from llama_index.core import VectorStoreIndex, Document, StorageContext
from llama_index.vector_stores.pinecone import PineconeVectorStore
from pinecone import Pinecone, ServerlessSpec

pinecone = Pinecone(
    api_key="pcsk_62ZrTU_Mmd8isarnWjT4ZhupFnKyZZm1rxsfZuNXcQNvHPhh7TzH1xsak43KQQHKSPqds"
)
# 定义索引的名称
index_name = "llama-index"
if index_name not in pinecone.list_indexes().names():
    pinecone.create_index(
        name=index_name,
        dimension=1536,  # 因为OpenAI嵌入向量的维度是1536
        metric="cosine",  # 使用余弦相似度作为度量类型
        spec=ServerlessSpec(cloud="aws", region="us-east-1"),
    )
# 连接到已经创建好的pinecone索引
pinecone_index = pinecone.Index(index_name)
# 根据pinecone索引创建PineconeVectorStore的对象
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
# 创建存储上下文对象，并将vector_store作为默认向量存储
storage_context = StorageContext.from_defaults(vector_store=vector_store)

# 构建示例文本列表，作为待存储的文档内容
sample_texts = [
    "Pinecone是一个云端的向量数据库，提供高性能的向量存储和检索。",
    "通过Pinecone，可以实现大规模向量数据的存储和快速检索。",
    "Pinecone支持实时更新和复杂的向量查询操作。",
]

# 将每个示例文本包装为Document对象，生成文档列表
documents = [Document(text=text) for text in sample_texts]

# 从文档列表创建向量索引，指定存储上下文，并显示进度条
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context, show_progress=True
)

# 获取查询引擎对象
query_engine = index.as_query_engine()
# 使用查询引擎对问题进行检索
response = query_engine.query("Pinecone是什么？")
# 打印查询结果
print(f"查询结果: {response}")
